内置着色器包含的文件

Unity包含多个文件,这些文件可以被着色器程序使用,以提供预定义的变量和辅助函数。这是标准的#include指令,例如:

    CGPROGRAM
    // ...
    #include "UnityCG.cginc"
    // ...
    ENDCG

Unity的着色器包含文件的用.cginc扩展,内置的是:

    HLSLSupport.cginc - (包括自动)跨平台着色器编译的自动宏和定义。    
    UnityShaderVariables.cginc - (包括自动) 常用的全局变量。
    UnityCG.cginc - 常用的辅助函数。
    AutoLight.cginc - 照明&跟踪功能,如表面着色器在内部使用这个文件。
    Lighting.cginc - 标准的表面材质照明模型;自动包括当你写表面着色器。
    TerrainEngine.cginc - 辅助函数的地形和植被着色器。

HLSLSupport.cginc 这个文件是编译时自动包括着色器。它声明了各种预处理器宏在多平台材质发展援助。

UnityShaderVariables.cginc 这个文件是编译时自动包括着色器。它宣称各种内置的着色器中常用的全局变量。

UnityCG.cginc 这个文件通常是包含在Unity着色器将有许多辅助功能。

在UnityCG.cginc中的结构体:

    struct appdata_base: vertex shader input with position, normal, one texture coordinate.
    struct appdata_tan: vertex shader input with position, normal, tangent, one texture coordinate.
    struct appdata_full: vertex shader input with position, normal, tangent, vertex color and two texture coordinates.
    struct appdata_img: vertex shader input with position and one texture coordinate.

UnityCG.cginc通用的辅助函数


    float3 WorldSpaceViewDir (float4 v) - 返回世界空间方向(非规范化)从给定对象空间顶点位置对着镜头。
    float3 ObjSpaceViewDir (float4 v) - 返回对象空间方向(非规范化)从给定对象空间顶点位置对着镜头。
    float2 ParallaxOffset (half h, half height, half3 viewDir) - 计算UV偏移视差法线贴图。
    fixed Luminance (fixed3 c) - 将颜色转换为亮度(灰度)。
    fixed3 DecodeLightmap (fixed4 color) - 解码颜色从Unity lightmap(RGBM或dLDR取决于平台)。
    float4 EncodeFloatRGBA (float v) - 编码[0 . . 1)浮动范围为RGBA颜色,用于存储在低精度渲染目标。
    float DecodeFloatRGBA (float4 enc) - 解码RGBA颜色到一个浮点数。
    同样,float2 EncodeFloatRG(v)浮动,浮动DecodeFloatRG(float2 enc)使用两个颜色通道。
    float2 EncodeViewNormalStereo (float3 n) - 编码正常视图空间中两个数字0 . .1范围。
    float3 DecodeViewNormalStereo (float4 enc4) - 从enc4.xy解码视图法线空间。

在UnityCG.cginc中的前向渲染辅助函数

这些函数使用向前渲染时只有(ForwardBase或ForwardAdd Pass类型)时有用。


    float3 WorldSpaceLightDir (float4 v) - 计算世界空间方向(非标准化),给定对象空间顶点位置。
    float3 ObjSpaceLightDir (float4 v) - 计算对象空间方向(非标准化),给定对象空间顶点位置。
    float3 Shade4PointLights (...) - 计算从四个点光源照明,光数据紧密到向量。向前渲染使用这个计算种每个顶点都具备的照明。

在UnityCG.cginc中顶点光照辅助函数

这些函数只有在逐顶点光照着色器中才有用。


    float3 ShadeVertexLights (float4 vertex, float3 normal) - 计算从四种每个顶点都具备的灯光和环境照明,给定对象的空间位置和法线。

🔚